package com.ybox.app.controller;

import com.ybox.app.domain.AppCollect;
import com.ybox.app.domain.AppCollectType;
import com.ybox.app.domain.example.AppCollectTypeExample;
import com.ybox.app.service.AppCollectTypeService;
import com.ybox.common.core.web.controller.BaseController;
import com.ybox.common.core.web.domain.AjaxResult;
import com.ybox.common.core.web.page.TableDataInfo;
import com.ybox.common.log.annotation.Log;
import com.ybox.common.log.enums.BusinessType;
import com.ybox.common.security.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;

/**
 * 收藏类型(AppCollectType)表控制层
 *
 * @author 16554
 * @since 2023-03-23 13:21:56
 */
@RestController
@RequestMapping("/type")
public class AppCollectTypeController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private AppCollectTypeService appCollectTypeService;

    /**
     * 分页查询
     *
     * @param appCollectType  筛选条件
     * @return 查询结果
     */
    @RequiresPermissions("app:type:list")
    @GetMapping
    public TableDataInfo queryByPage(AppCollectType appCollectType) {
        startPage();
        return getDataTable(null);
    }

    /**
     * 查询全部
     *
     * @param appCollectType  筛选条件
     * @return 查询结果
     */
    @RequiresPermissions("app:type:query")
    @GetMapping("/list")
    public AjaxResult queryAll(AppCollectType appCollectType) {

        return success(null);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @RequiresPermissions("app:type:query")
    @GetMapping("/{id}")
    public AjaxResult queryById(@PathVariable("id") Integer id) {
        return success(this.appCollectTypeService.selectByPrimaryKey(id));
    }

    /**
     * 新增数据
     *
     * @param appCollectType 实体
     * @return 新增结果
     */
    @RequiresPermissions("app:type:add")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated(AppCollect.insert.class) @RequestBody AppCollectType appCollectType) {
        return toAjax(appCollectTypeService.insertSelective(appCollectType));
    }


    /**
     * 编辑数据
     *
     * @param appCollectType 实体
     * @return 编辑结果
     */
    @RequiresPermissions("app:type:edit")
    @Log(title = "收藏管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody AppCollectType appCollectType) {
        return toAjax(appCollectTypeService.updateByPrimaryKeySelective(appCollectType));
    }

    /**
     * 删除收藏
     * @param collectIds 收藏ids
     * @return 删除是否成功
     */
    @RequiresPermissions("app:type:remove")
    @Log(title = "收藏管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{collectIds}")
    public AjaxResult remove(@PathVariable Integer[] collectIds) {
        // 创建 Example 对象
        AppCollectTypeExample example = new AppCollectTypeExample();
        // Example对象包含一个static的内部类Criteria，Criteria中的方法用来定义SQL语句where后的查询条件，只能有一个createCriteria
        AppCollectTypeExample.Criteria criteria = example.createCriteria();
        // 选择所有 id in collectIds 的收藏
        criteria.andTypeIdIn(Arrays.asList(collectIds));
        // 执行查询
        return toAjax(appCollectTypeService.deleteByExample(example));
    }
}

